/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ecom.shell;

import java.io.PrintStream;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import shell.command.ShellCommandImpl;
import shell.command.ShellContext;

/**
 *
 * @author François
 */
public class BatchCommandImpl extends ShellCommandImpl {
    /**
     * Constructeur
     */
    public BatchCommandImpl(final ShellContext context) {
	super(context);
    }

    @Override
    public String getName() {
	return "batch";
    }

    @Override
    public String getUsage() {
	return "batch [-stopOnError] commandFile";
    }

    @Override
    public String getShortDescription() {
	return "Run commands in commandFile";
    }

    /**
     * @see shell.command.ShellCommandImpl#execute(java.lang.String,
     *      java.io.PrintStream, java.io.PrintStream)
     */
    @Override
    public void execute(final String ligneDeCommande, final PrintStream out,
	    final PrintStream err) {
	boolean stopOnError = false;
	String nomFichier = null;
	Matcher matcher = null;

	Pattern patternBatch = Pattern
		.compile("^(-stopOnError\\s)?(\\w*\\.\\w*|\\w+\\S+)$");
	Pattern patternStop = Pattern.compile("-stopOnError");

	matcher = patternBatch.matcher(ligneDeCommande);
	if (!matcher.find()) {
	    out.println("Usage: " + this.getUsage());
	    return;
	}

	nomFichier = new String(ligneDeCommande);

	/*
	 * Détecte si arrêt sur erreur
	 */
	matcher = patternStop.matcher(ligneDeCommande);
	if (matcher.find()) {
	    stopOnError = true;
	    nomFichier = nomFichier.replaceAll("-stopOnError ", "");
	}

	if (stopOnError) {
	    out.println("Traitement du fichier " + nomFichier
		    + " et arrêt si une exception est levée");
	} else {
	    out.println("Traitement du fichier " + nomFichier);
	}

	/*
	 * Transformation en arguments
	 */
	nomFichier = nomFichier.trim();
	String[] tNomFichier = new String[1];
	tNomFichier[0] = nomFichier;

	/*
	 * Execution
	 */
	EcomShell shellExecBatch = new EcomShell(tNomFichier);
	shellExecBatch.setArretErreur(stopOnError);
	shellExecBatch.run();

	if (shellExecBatch.isErreur()) {
	    err.println("Script terminé avec erreurs. Dernière erreur: "
		    + shellExecBatch.getErreur().getMessage());
	} else {
	    out.println("Script terminé avec succès");
	}
    }

}

